package myorg.myrpc;

import java.util.List;
import java.util.Map;
import myorg.myrpc.db.PersonBean;

/**
 * Myrpc 服务接口<br>
 * @author unknow_author
 */
public interface IMyrpc{

	/**
	 * 返回personId指定的人员记录
	 * @param personId
	 * @return 没有找到匹配的记录则返回{@code null}
	 */
	public PersonBean getPerson(int personId) ;

	/**
	 * 返回 list 指定的人员记录
	 * @param idList 人员id列表
	 * @return 没有找到匹配的记录则返回空表
	 */
	public List<PersonBean> getPersons(List<Integer> idList);

	/**
	 * 根据证件号码返回人员记录
	 * @param papersNum
	 * @return 没有找到匹配的记录则返回{@code null}
	 */
	public PersonBean getPersonByPapersNum(String papersNum);

	/**
	 * 根据登记的手机号码返回人员记录
	 * @param mobilePhone
	 * @return 没有找到匹配的记录则返回{@code null}
	 */
	public PersonBean getPersonByMobilePhone(String mobilePhone);
	/**
	 * 判断是否存在personId指定的人员记录
	 * @param persionId
	 * @return true if exists,otherwise false
	 */
	public boolean existsPerson(int persionId);

	/**
	 * 返回所有人员记录
	 * @return 返回 my_person.id 列表
	 */
	public List<Integer> loadAllPerson();
	
	/**
	 * 返回 where 指定的所有人员记录
	 * @param where 'WHERE'开头的SQL条件语句,为{@code null}或空时加载所有记录
	 * @return 返回 my_person.id 列表
	 */
	public List<Integer> loadPersonIdByWhere(String where);
	
	/**
	 * 返回 where 指定的所有人员记录
	 * @param where 'WHERE'开头的SQL条件语句,为{@code null}或空时加载所有记录
	 * @param startRow 记录起始行号 (first row = 1, last row = -1)
	 * @param numRows 返回记录条数 为负值是返回{@code startRow}开始的所有行
	 * @return 人员记录列表,没有找到匹配的记录则返回空表
	 */
	public List<PersonBean> loadPersonByWhere(String where, int startRow, int numRows);
	/**
	 * 返回满足{@code where}条件的日志记录(my_person)数目
	 * @param where 'WHERE'开头的SQL条件语句,为{@code null}时返回所有记录
	 * @return 返回满足{@code where}条件的日志记录(my_person)数目
	 */
	public int countPersonByWhere(String where);
	/**
	 * 保存人员(person)记录
	 * @param personBean {@code my_person}表记录
	 * @return 保存的{@link PersonBean}
	 */
	public PersonBean savePerson(PersonBean personBean);
	/**
	 * 删除personId指定的人员(person)记录及关联的所有记录
	 * @param personId
	 * @return 删除成功返回1,否则返回0
	 */
	public int deletePerson(int personId);

    /**
	 * 返回服务版本号
	 * @return 服务版本号
	 */
	public String version();
	/**
	 * 返回服务版本的详细信息<br>
	 * <ul>
	 * <li>{@code VERSION} -- 服务版本号</li>
	 * <li>{@code SCM_REVISION} -- GIT修订版本号</li>
	 * <li>{@code SCM_BRANCH} -- GIT分支</li>
	 * <li>{@code TIMESTAMP} -- 时间戳</li>
	 * </ul>
	 * 
	 * @return 服务版本的详细信息(参数名-参数值映射)
	 */
	public Map<String, String> versionInfo();
	/**
	 * 是否为本地实现
	 * @return true if local implementation
	 */
	public boolean isLocal();
}